#ifndef BAS_BAS_LIST_PRIVATE_H
#define BAS_BAS_LIST_PRIVATE_H

#include <stdlib.h>
#include "bas/bas_container.h"

/**
 * 列表节点 
 */
typedef struct T_ListNode_tag
{
    struct T_ListNode_tag *ptPrev;   ///<指向前一个节点的指针
    struct T_ListNode_tag *ptNext;   ///<指向后一个节点的指针
    char                  caData[0]; ///<元素数据
} T_ListNode;

/**
 * 列表
 */
typedef struct T_List_tag
{
    T_IteratorCallBackTable *ptCallBackTable; ///<迭代器回调函数表指针
    T_TypeInfo              tTypeInfo;        ///<类型信息
    T_ListNode              *ptEndNode;       ///<列表尾节点(哨兵节点)指针
} T_List;

/**
 * @brief     调整当前List中元素的个数为nSize个
 * @param[in] ptList          指向vector的指针
 * @param[in] nSize           调整后Vector中元素的个数
 * @param[in] ptInitParameter 可变参数为初始化函数的参数
 * @see       basListResize
 * @note      1.可选参数列表必须以BAS_PARM_END结尾
 *            2.本函数为内部函数, 不应该直接调用本函数
 */
int _basListResize(T_List *ptList, const size_t nSize, ...);

/**
 * @brief     对List中的的元素进行排序
 * @param[in] ptList  指向List的指针
 * @param[in] pfnLess 可变参数, 小于比较函数
 * @see       basListSort
 * @note      1.可选参数列表必须以BAS_PARM_END结尾
 *            2.本函数为内部函数, 不应该直接调用本函数
 */
void _basListSort(T_List *ptList, ...);

#endif
